package rn;

import entidades.UnidadeMilitar;
import entidades.Usuario;
import excessoes.DAOException;
import fabricas.DAOFabrica;
import interfaces.InterfaceTramitacaoVolumeDAO;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import util.FacesUtil;
import entidades.Setor;
import entidades.TramitacaoVolume;
import entidades.VolumeProcesso;

/**
 *
 * @author Marcelo Gomes Neto
 */
public class TramitacaoVolumeRN {

    private InterfaceTramitacaoVolumeDAO interfaceTramitacaoVolumeDAO;

    public TramitacaoVolumeRN() {
        this.interfaceTramitacaoVolumeDAO = DAOFabrica.criarTramitacaoVolumeDAO();
    }

    public TramitacaoVolume carregarTramitacaoVolume(Integer id) throws Exception {
        return this.interfaceTramitacaoVolumeDAO.carregarTramitacaoVolume(id);
    }
    
    public String salvarTramitacaoVolume(TramitacaoVolume tramitacaoVolume, Usuario usuario, Integer omDestino, Integer setorDestino, String despacho, Integer idvolume) throws DAOException, Exception 
    {
        Date dataAtual = new Date(System.currentTimeMillis());
        Integer idUnidadeUsu = usuario.getPessoa().getUnidade();
        Integer idSetorUsu = usuario.getPessoa().getSetor();
        String nomeUsuario = usuario.getPessoa().getPostoGraduacao()+" "+usuario.getPessoa().getNomeGuerra(); //Posto e nome do usuário na tabela TRAMITAÇÃO
            
        if (omDestino == null || omDestino == -1) {
            String msg = "É necessário selecionar a Unidade destino! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
            
        if (setorDestino == null || setorDestino == -1) {
            String msg = "É necessário selecionar o Setor destino! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
        
        if (despacho == null || despacho.equals("")) {
            String msg = "Campo Despacho obrigatório! Operação não realizada.";
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
            return null;
        }
            
        if ((setorDestino != null || setorDestino != -1) && (omDestino != null || omDestino != -1) && (despacho != null || !despacho.equals(""))) 
        {
            //Obtem a descrição da OM e do Setor
            UnidadeMilitarRN umRN = new UnidadeMilitarRN();
            // Carrega a sigla da Unidade destino
            UnidadeMilitar um = umRN.carregarUnidadeMilitar(omDestino);
            String omSigla = um.getSiglaOM();
            // Carrega a sigla da Unidade do rementente (usuário)
            UnidadeMilitar umu = umRN.carregarUnidadeMilitar(idUnidadeUsu);
            String omSiglaU = umu.getSiglaOM();
            // Carrega a sigla do Setor destino
            SetorRN stRN = new SetorRN();
            Setor st = stRN.carregarSetor(setorDestino);
            String stSigla = st.getSiglaSetor();
            // Carrega a sigla do Setor do rementente (usuário)
            Setor stu = stRN.carregarSetor(idSetorUsu);
            String stSiglaU = stu.getSiglaSetor();

            VolumeProcessoRN volumeProcessoRN = new VolumeProcessoRN();
            VolumeProcesso volumeProcesso = volumeProcessoRN.carregarVolume(idvolume);
            volumeProcesso.setUnidadeAtual(omDestino);
            volumeProcesso.setSetorAtual(setorDestino);
            volumeProcesso.setEncaminhadoPor(nomeUsuario);
            volumeProcesso.setDataEntradaSetor(dataAtual);
            volumeProcesso.getTramitacaoVolume().add(tramitacaoVolume);

            tramitacaoVolume.setDataTramitacao(dataAtual);
            tramitacaoVolume.setRemetente(nomeUsuario);
            tramitacaoVolume.setUnidadeRemetente(omSiglaU);
            tramitacaoVolume.setSetorRemetente(stSiglaU);
            tramitacaoVolume.setUnidadeDestino(omSigla);
            tramitacaoVolume.setSetorDestino(stSigla);
            tramitacaoVolume.setDespacho(despacho);
            tramitacaoVolume.setVolumeProcesso(volumeProcesso);
            
            this.interfaceTramitacaoVolumeDAO.salvarTramitacaoVolume(tramitacaoVolume);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Volume encaminhado com sucesso!", ""));
        }
        return null;
    }

    public List<TramitacaoVolume> listarTramitacaoVolume() {
        return this.interfaceTramitacaoVolumeDAO.listarTramitacaoVolume();
    }
    
    public List<TramitacaoVolume> listarTramitacaoVolumePorSetor(Integer idsetor) 
    {
        List<TramitacaoVolume> lista;
        lista = this.interfaceTramitacaoVolumeDAO.listarTramitacaoVolumePorSetor(idsetor);
        if (lista.isEmpty() || lista == null) {
            //FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Não há informações para os parâmetros informados!", ""));
            return null;
        }
        return lista;
    }
    
    public List<TramitacaoVolume> listarTramitacaoPorVolume(Integer idvolume) {
        return this.interfaceTramitacaoVolumeDAO.listarTramitacaoPorVolume(idvolume);
    }
}